<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        var a =1;
        console.log(a);//1
        (function(){
            // 暂时性死区就是，不能在一个变量初始化之前去访问它。var会有一个声明提前的机制，但是let和const不会有
            // console.log(a);//Uncaught ReferenceError: Cannot access 'a' before initialization
            let a = 2;
        })()

        console.log('------------------------------');

        // const声明的变量不允许重新赋值
        const b = 1;
        b = 2;//Uncaught TypeError: Assignment to constant variable.

        // 但是有个小知识
        const obj = {name:'mikaisa'};
        obj.age = 18;//这样的修改是允许的，因为const所保护的是对象的地址值，你这样的修改是不会更改地址值的，所以不会引起报错
        
        // 但是如果你直接这样，那就要报错了
        obj = {};//Uncaught TypeError: Assignment to constant variable.
    </script>
</body>
</html>